package _06_Autowired.byName;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * @author HLF
 * @version V1.0
 * @package _06_Autowired
 * @date 2021/10/14 15:03
 */
@Component("myStudent")
public class Student {
    @Value("王大锤子")
    private String name;
    @Value("42")
    private Integer age;

    /**
     * @Autowired: spring框架提供的注解，给引用数据类型的属性赋值
     * 使用的是自动注入原理。支持byName,byType
     * @Autowired 默认使用的是byType自动注入(推荐使用byType)
     * 和在xml配置文件的<bean autowire="byType"></bean>一样
     *
     * 位置：1.属性定义的上面（推荐使用）
     *      2.set方法的上面
     *
     * 如果要使用byName的方式，需要做如下操作：
     * 1.在属性的上面加入@Autowired注解
     * 2.在属性上面加入@Qualifier(value="bean的id")：表示使用指定名称的bean完成赋值
     *
     * @Autowired 还有一个属性 required，默认值为 true，表示当匹配失败（引用类型赋值失败，程序报错）后，
     * 会终止程序运行。
     * 若将其值设置为 false，则匹配失败，将被忽略，未匹配的属性值为 null。
     */
    @Autowired
    @Qualifier(value = "mySchool")
    private School school;

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", school=" + school +
                '}';
    }
}
